home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-03
/
pvt12.zip
/
PVT.BAS
< prev
next >
Wrap
BASIC Source File
|
1990-11-22
|
3KB
|
129 lines
DECLARE SUB SaveFile ()
DECLARE SUB GetPassword ()
DECLARE SUB LoadFile ()
DECLARE SUB Crypt (PWord$)
DEFINT A-Z
DIM SHARED Buf$(5000), PWord$, LineCnt, FileName$
CLS
PRINT "PVT Private File scrambler v1.2 (c) 1990 Brent Ashley"
PRINT : PRINT " Please Enter Private Password: [xxxx]"
GetPassword
IF PWord$ = " " THEN
PRINT "PVT Aborted."
END
END IF
LoadFile
Crypt PWord$
SaveFile
PRINT "...Done": PRINT
END
ErrorHandler:
BEEP
COLOR 7, 0: CLS
SELECT CASE ERR
CASE 14
PRINT "File too big (40k max)"
CASE 52
PRINT "Bad File Name or Number"
CASE 71
PRINT "Disk Not Ready"
CASE 76
PRINT "Path Not Found"
CASE ELSE
PRINT "Error #"; ERR
ERROR ERR
END SELECT
END
SUB Crypt (PWord$)
STATIC i, j
PRINT
PRINT "Scrambling..."
' calculate Xor value
xnum = 0
FOR i = 1 TO 4
xnum = xnum + (ASC(MID$(PWord$, i, 1)) * i)
NEXT
xnum = xnum MOD 256
' crypt buffer
FOR i = 0 TO LineCnt
FOR j = 1 TO LEN(Buf$(i))
IF j MOD 2 THEN ' even/odd
MID$(Buf$(i), j, 1) = CHR$(ASC(MID$(Buf$(i), j, 1)) XOR xnum)
ELSE
MID$(Buf$(i), j, 1) = CHR$(ASC(MID$(Buf$(i), j, 1)) XOR (255 - xnum))
END IF
NEXT
NEXT
END SUB
SUB GetPassword
PWord$ = " "
Posn = 1
DO
LOCATE 3, 38 + Posn, 1
PKey$ = ""
DO
PKey$ = UCASE$(INKEY$)
LOOP WHILE PKey$ = ""
SELECT CASE PKey$
CASE "0" TO "9", "A" TO "Z", " "
PRINT " ";
MID$(PWord$, Posn, 1) = PKey$
Posn = Posn + 1
IF Posn > 4 THEN EXIT DO
CASE CHR$(8), CHR$(0) + "K"
IF Posn > 1 THEN
Posn = Posn - 1
ELSE
BEEP
END IF
CASE CHR$(27)
PWord$ = " "
EXIT DO
CASE ELSE
BEEP
END SELECT
LOOP
PRINT : PRINT
END SUB
SUB LoadFile
FileName$ = COMMAND$
PRINT "Loading file...";
ON ERROR GOTO ErrorHandler
OPEN FileName$ FOR INPUT AS 1
LineCnt = 0
DO WHILE NOT EOF(1)
LINE INPUT #1, Buf$(LineCnt)
IF Buf$(LineCnt) = CHR$(12) THEN Buf$(LineCnt) = " "
LineCnt = LineCnt + 1
LOOP
CLOSE 1
ON ERROR GOTO 0
END SUB
SUB SaveFile
dotpos = INSTR(FileName$, ".")
IF dotpos THEN
BeforeDot$ = LEFT$(FileName$, dotpos - 1)
ELSE
BeforeDot$ = RTRIM$(FileName$)
END IF
OutFile$ = BeforeDot$ + ".PVT"
PRINT "Saving "; OutFile$; "..."
ON ERROR GOTO ErrorHandler
OPEN OutFile$ FOR BINARY AS 1
tmp$ = "{ePbVaT}" + CHR$(13) + CHR$(10)
PUT #1, , tmp$
FOR i = 0 TO LineCnt
Length% = LEN(Buf$(i))
PUT #1, , Length%
PUT #1, , Buf$(i)
NEXT
CLOSE 1
END SUB